home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu309.dms / pu309.adf / Satellite / tracker10 < prev    next >
Text File  |  1990-09-29  |  11KB  |  382 lines

  1. '         "TRACKER10"       Satellite tracking program with graphics
  2. '         ---------
  3. '
  4. 'Version 1.02 : Last mod 2nd March 1990 by ACH
  5. '
  6. '(C) 1988 Mr J R Miller G3RUH
  7. '(C) 1988 Mr A C Hewat  G8NTH
  8. '
  9. 'V 1.00: First version ; original concept with limited graphics etc.
  10. 'V 1.01: Change of order of initilisation for constants to fix date.
  11. 'V 1.02: Minor changes to make itteration more accurate. Format change.
  12.  
  13. DEFDBL a-z
  14. CLEAR,55000&,6000&
  15. DIM C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13(10),SatName$(10),stepSize(10),ObjectShape$(10)
  16. DIM days&(12)
  17.  
  18. Main:
  19. predictionTime = 0
  20. lastChoise = 1
  21. menuItem = 1
  22. oldSatellite = 1
  23. oldChoise1 = 1
  24. GOSUB Ephemeris
  25. GOSUB Constants
  26. GOSUB TodayDate
  27. OPEN "scrn:" FOR OUTPUT AS #2
  28. LOCATE 2,1: PRINT "Tracker 10 - V1.02  (C) 1989  A C Hewat   G8NTH  @  GB3UP-2  "
  29. LOCATE 5,1
  30. PRINT "Satellite  Orbit Lat Long  Height  MA  EL   AZ  Range  Rate  Mode  Illm  Sqnt";
  31.                                                                          
  32. Quit = -1
  33. realTimeFlag = -1
  34. WHILE Quit
  35. LOCATE 6,1
  36.    FOR satellite = 1 TO 10
  37.       GOSUB DisplayTimePos
  38.       GOSUB SatelliteConstants
  39.       GOSUB CalcthenDisplay
  40.       GOSUB DisplaySatInfo
  41.    NEXT 
  42. WEND
  43.  
  44. MENU OFF: MOUSE OFF: TIMER OFF
  45. MENU RESET 
  46. CLS
  47. END
  48.  
  49. DisplayTimePos:
  50. csrY = CSRLIN: csrX = POS(0)
  51. LOCATE 2,65
  52. PRINT TIME$;" UTC";
  53. LOCATE csrY,csrX
  54. RETURN
  55.  
  56. CalcthenDisplay:
  57. GOSUB TimeNow
  58. TN = DY + (hour+minutes/60)/24
  59. GOSUB SatVec
  60. GOSUB RangeVec
  61. GOSUB SunVec
  62. RETURN
  63.  
  64. DisplaySatInfo:  
  65. satLat1 = CINT(satLat1): satLong1 = CINT(satLong1): ssrr = FNRN(ssrr-RE): SQ = FNRN(SQ)
  66. EL = CINT(EL): AZ = CINT(AZ): R = FNRN(R): m = INT(m*128/pi): ILL = FNRN(100*ILL)
  67. IF satellite = 1 THEN
  68.   mode$ = "B"
  69. ELSEIF satellite = 3 THEN
  70.   IF m > 0 AND m < 110 THEN mode$ = "B"
  71.   IF m > 109 AND m < 145 THEN mode$ = "JL"
  72.   IF m > 144 AND m < 150 THEN mode$ = "B Bcn"
  73.   IF m > 144 AND m < 147 THEN mode$ = "S Bcn"
  74.   IF m > 146 AND m < 160 THEN mode$ = "S"
  75.   IF m > 149 AND m < 255 THEN mode$ = "B"
  76.   IF m < 35 OR m > 225 THEN mode$ = "B Omi"
  77. ELSE  
  78.   mode$ = "     "
  79. END IF
  80. PRINT SatName$(satellite);TAB(12);
  81. PRINT USING "#####";RN;
  82. PRINT TAB(18);satLat1;TAB(23);satLong1;TAB(28);
  83. PRINT USING "#####";ssrr;
  84. PRINT TAB(35) USING "###";m;
  85. PRINT " ";
  86.  IF EL > -3 THEN 
  87.    PRINT TAB(39);EL;TAB(43);AZ;TAB(49);
  88.    PRINT USING "#####";R;
  89. '   PRINT TAB(55);RR;
  90.    PRINT TAB(62);mode$;TAB(69);ILL;TAB(74);SQ
  91.  ELSE 
  92.    PRINT TAB(41)"                                            "
  93.  END IF
  94. RETURN
  95.  
  96. CheckMenu:
  97. menuId = MENU(0)
  98. menuItem = MENU(1)
  99. ON menuId GOTO Project,SatelliteChoise,Predictions,Display
  100. RETURN
  101.  
  102. Project:
  103. MENU 1,lastChoise,1
  104. IF menuItem = 3 AND echo = 1 THEN Jump
  105. MENU 1,menuItem,2
  106. Jump:
  107. IF menuItem = 3 THEN GOSUB EchoSet
  108. IF menuItem = 4 THEN Quit = 0
  109. lastChoise = menuItem
  110. RETURN
  111.  
  112. SatelliteChoise:
  113. MENU 2,oldSatellite,1
  114. whichSatellite = menuItem
  115. MENU 2,whichSatellite,2
  116. oldSatellite = whichSatellite
  117. RETURN
  118.  
  119.  
  120. SatelliteConstants:
  121. YE = C1(satellite)         'Epoch year
  122. TE = C2(satellite)         'Epoch time
  123. IN = C3(satellite)         'Inclination
  124. RA = C4(satellite)         'R.A.A.N.
  125. EC = C5(satellite)         'Eccentricity
  126. WP = C6(satellite)         'Arg of perigee
  127. MA = C7(satellite)         'Mean anomaly
  128. MM = C8(satellite)         'Mean motion
  129. M2 = C9(satellite)         'Decay rate
  130. RV = C10(satellite)        'Epoch rev
  131. a  = C11(satellite)        'Semi-major axis.  0 if not known
  132. ALAT = C12(satellite)      'Sat att, deg.  0 = in plain, + = below
  133. ALON = C13(satellite)      'Sat att, deg CCW from SMA dir. 180 = Normal
  134.  
  135. IF a = 0 THEN a = (8681668.016000001#/MM)^(2/3)
  136.  
  137. RA = RAD*RA
  138. MA = RAD*MA
  139. IN = RAD*IN
  140. MM = MM*2*pi
  141. WP = RAD*WP
  142. M2 = M2*2*pi
  143. ALAT = RAD*ALAT
  144. ALON = RAD*ALON
  145.                                   
  146. B = a*SQR(1-EC*EC)               
  147. SI = SIN(IN): CI = COS(IN)
  148. PC = RE*a/(B*B): PC = 1.5*J2*PC*PC*MM  
  149. QD = -PC*CI                      
  150. WD = PC*(5*CI*CI-1)/2      
  151. DC = (M2/MM)/3       
  152.               
  153. TEG = FNDO(YE)-FNDO(YG) + TE  
  154. GHAE = RAD*GO + TEG*WE   
  155. MRSE = RAD*GO + TEG*WW + pi  
  156. MASE = RAD*(MASO + MASD*TEG) 
  157. RETURN
  158.  
  159. SatVec:
  160. T = (FNDO(YR)-FNDO(YE)) + (TN-TE) 
  161. DT = DC*T/2   
  162. KD = 1-4*DT  
  163. KDP = 1+7*DT    
  164. m = MA + MM*T*(1+3*DT) 
  165. DR = INT(m/(2*pi)) 
  166. m = m - DR*2*pi     
  167. RN = RV + DR   
  168.  
  169. EA = m
  170. Loop:
  171.   C = COS(EA)
  172.   S = SIN(EA)
  173.   DNOM = 1-EC*C
  174.   DE = (EA - EC*S - m)/DNOM    
  175.   EA = EA - DE       
  176. IF ABS(DE) > .002 THEN GOTO Loop   
  177.  
  178. C = COS(EA)
  179. S = SIN(EA)
  180. RGC = a*(1-EC*C)*KD
  181.  
  182. SX = a*(C-EC)*KD:  TA = -COS(ALAT):   XA = TA*COS(ALON)  
  183. SY = B*S*KD:    YA = TA*SIN(ALON):  ZA = -SIN(ALAT)
  184. W = WP + WD*T*KDP:  C = COS(W):   S = SIN(W)
  185. X = SX*C - SY*S:    TA = XA:      XA = TA*C - YA*S
  186. Y = SX*S + SY*C:                  YA = TA*S + YA*C
  187. z = Y*SI: TA = ZA: ZA = YA*SI+TA*CI: ANTZ = ZA
  188. Y = Y*CI:          YA = YA*CI-TA*SI: ANTY = YA
  189.                                      ANTX = XA
  190.  
  191. RAAN = RA + QD*T*KDP
  192. GHAA = GHAE + WE*T   
  193. Q = RAAN - GHAA               
  194. C = COS(Q): S = SIN(Q)
  195. SX = X*C - Y*S:    TA = XA:     XA = TA*C - YA*S
  196. SY = X*S + Y*C:                 YA = TA*S + YA*C
  197. SZ = z
  198.  
  199. C = COS(RAAN): S = SIN(RAAN)
  200. SATX = X*C - Y*S:   TA = ANTX:  ANTX = TA*C - ANTY*S
  201. SATY = X*S + Y*C:               ANTY = TA*S + ANTY*C
  202. SATZ = z
  203. NMX = S*SI: NMY = -C*SI: NMZ = CI
  204. RETURN
  205.  
  206. SunVec:
  207. MAS = MASE + RAD*(MASD*T)  
  208. TAS = MRSE + WW*T + EQC1*SIN(MAS) + EQC2*SIN(2*MAS) + EQC3*SIN(3*MAS)
  209. C = COS(TAS):  S = SIN(TAS)     
  210. SUNX = C:  SUNY = S*CNS:  SUNZ = S*SNS   
  211.  
  212. CSA = ANTX*SUNX + ANTY*SUNY + ANTZ*SUNZ  
  213. ILL = SQR(1-CSA*CSA)   
  214. SATX = SATX/RGC:  SATY = SATY/RGC:  SATZ = SATZ/RGC 
  215. CUA = -(SATX*SUNX + SATY*SUNY + SATZ*SUNZ) 
  216. UMD = RGC*SQR(1-CUA*CUA)/RE    
  217. SEL = (SUNX*NMX + SUNY*NMY + SUNZ*NMZ) 
  218. SEL = ATN(SEL/SQR(-SEL*SEL+1))
  219. IF CUA >= 0 THEN ECL$ = "    +" ELSE ECL$ = "    -"
  220. IF UMD <= 1 AND CUA >= 0 THEN ECL$ = "   ECL"
  221. RETURN
  222.  
  223. RangeVec:
  224. RX = SX - OX:  RY = SY - OY:  RZ = SZ - OZ  
  225. R = SQR(RX*RX + RY*RY + RZ*RZ)   
  226. RX = RX/R: RY = RY/R:  RZ = RZ/R   
  227. U = RX*UX + RY*UY + RZ*UZ   
  228. E = RX*EX + RY*EY + RZ*EZ  
  229. N = RX*NX + RY*NY + RZ*NZ   
  230. AZ = DEG*(ATN(E/N))       
  231. IF N < 0 THEN AZ = AZ + 180              
  232. IF AZ < 0 THEN AZ = AZ + 360
  233. EL = DEG*(ATN(U/SQR(-U*U+1)))
  234. srr = SQR(SX*SX+SY*SY)     
  235. ssrr = SQR(SX*SX+SY*SY+SZ*SZ)    
  236. szrr = SZ/ssrr: syr = SY/srr
  237. satLat1 = DEG*(ATN(szrr/SQR(-szrr*szrr+1))) 
  238. satLong1 = DEG*(ATN(syr/SQR(-syr*syr+1))) 
  239. SQ =  -(XA*RX + YA*RY + ZA*RZ) 
  240. SQ = DEG*(-ATN(SQ/SQR(-SQ*SQ+1))+1.5708)
  241. RETURN
  242.  
  243. TodayDate:
  244. day = VAL(MID$(DATE$,4,2))
  245. month = VAL(LEFT$(DATE$,2))
  246. YR = VAL(RIGHT$(DATE$,4))  
  247. DY =  day + days&(month): IF month > 2 THEN DY = DY + (INT(YR/4)-INT((YR-1)/4))
  248. RETURN
  249.  
  250. TimeNow:
  251. hour = VAL(LEFT$(TIME$,2))
  252. minutes = VAL(MID$(TIME$,4,2))+(VAL(RIGHT$(TIME$,2))/60)
  253. RETURN
  254.  
  255. ScreenSetup:
  256. MENU
  257. ON MENU GOSUB CheckMenu: MENU ON
  258.  
  259. MENU 1,0,1,"Project "
  260. MENU 1,1,2,"  Map Display "
  261. MENU 1,2,1,"              "
  262. MENU 1,3,1,"  Serial Echo "
  263. MENU 1,4,1,"  Quit        "
  264. MENU 2,0,1,"              "
  265. MENU 3,0,1,"              "
  266. MENU 4,0,1,"    "
  267. MENU 5,0,1,"    "
  268. MENU 6,0,1,"    "
  269. RETURN
  270.  
  271. Constants:
  272. days&(0)=0:days&(1)=0:days&(2)=31:days&(3)=59:days&(4)=90:days&(5)=120:days&(6)=151
  273. days&(7)=181:days&(8)=212:days&(9)=243:days&(10)=273:days&(11)=304:days&(12)=334
  274. LA =  51.268333#           ' Latitude of QTH, + north, - south
  275. LO = -.563333              ' Longitude of QTH, + deg east, - deg west
  276. HT = 35                    ' Height of QTH above mean sea level
  277. pi = 3.141592654#
  278. DEG = 180/pi                           
  279. RAD = 1/DEG               
  280. DEF FNRN(X) = INT(X+.5)
  281. LA = RAD*LA
  282. LO = RAD*LO
  283. HT = HT/1000
  284. CL = COS(LA)
  285. SL = SIN(LA)
  286. CO = COS(LO)
  287. SO = SIN(LO)
  288.  
  289. RE = 6378.14
  290. FL = 1/298.256      
  291. RP = RE*(1-FL)
  292. XX = RE*RE
  293. ZZ = RP*RP
  294. D = SQR(XX*CL*CL + ZZ*SL*SL)
  295. RX = XX/D + HT
  296. RZ = ZZ/D + HT
  297.  
  298. UX = CL*CO:       EX = -SO:       NX = -SL*CO
  299. UY = CL*SO:       EY = CO:        NY = -SL*SO
  300. UZ = SL:          EZ = 0:         NZ = CL
  301. OX = RX*UX:       OY = RX*UY:     OZ = RZ*UZ
  302.  
  303. YG = 1988:    GO = 98.8897   
  304. MASO = 356.1611:   MASD = .9856002671#    
  305. INS = RAD*23.4408:  CNS = COS(INS):   SNS = SIN(INS)  
  306. EQC1 = .03342715297#:  EQC2 = .00034917#:  EQC3 = .00000506#  
  307.  
  308. YM = 365.25        
  309. YT = 365.2421938#         
  310. DEF FNDO(Y) = INT((Y-1)*YM)   
  311. WW = 2*pi/YT                  
  312. WE = 2*pi + WW                    
  313. J2 = .00108263#               
  314. RETURN
  315.  
  316. Ephemeris:
  317.  
  318. SatName$(1)="OSCAR 10s  ": SatName$(2)="OSCAR 11 ":  SatName$(3)="OSCAR 13s "
  319. C1(1)=1989:                C1(2)=1990:               C1(3)=1989
  320. C2(1)=330.318#:            C2(2)=86.14190031#:       C2(3)=324.328282#
  321. C3(1)=25.9:                C3(2)=97.963:             C3(3)=57.12
  322. C4(1)=232:                 C4(2)=141.366:            C4(3)=181.5
  323. C5(1)=.6:                  C5(2)=.0012026:           C5(3)=.6831
  324. C6(1)=96:                  C6(2)=141.7015:           C6(3)=215.48
  325. C7(1)=331:                 C7(2)=218.5388:           C7(3)=0
  326. C8(1)=2.0588#:             C8(2)=14.65066797#:       C8(3)=2.097
  327. C9(1)=0:                   C9(2)=.00002602#:         C9(3)=0
  328. C10(1)=4855:               C10(2)=32395:             C10(3)=1099
  329. C11(1)=0:                  C11(2)=0:                 C11(3)=0
  330. C12(1)=0:                  C12(2)=0:                 C12(3)=3.6
  331. C13(1)=180:                C13(2)=180:               C13(3)=179.4
  332.  
  333.  
  334. SatName$(4)="OSCAR 14 ":   SatName$(5)="OSCAR 15  ": SatName$(6)="OSCAR 16  "
  335. C1(4)=1990:                C1(5)=1990:               C1(6)=1990
  336. C2(4)=22.0781597#:         C2(5)=22.0781597#:        C2(6)=22.0781597#
  337. C3(4)=98.738:              C3(5)=98.738:             C3(6)=98.738
  338. C4(4)=97.9558:             C4(5)=97.9558:            C4(6)=97.9558
  339. C5(4)=.00133:              C5(5)=.00133:             C5(6)=.00133
  340. C6(4)=114.674:             C6(5)=114.674:            C6(6)=114.674
  341. C7(4)=281.82:              C7(5)=281.82:             C7(6)=281.82
  342. C8(4)=14.221152#:          C8(5)=14.221152#:         C8(6)=14.221152#
  343. C9(4)=-.000005#:           C9(5)=.000005:            C9(6)=.000005#
  344. C10(4)=0:                  C10(5)=0:                 C10(6)=0
  345. C11(4)=0:                  C11(5)=0:                 C11(6)=0
  346. C12(4)=0:                  C12(5)=0:                 C12(6)=0
  347. C13(4)=180:                C13(5)=180:               C13(6)=180
  348.  
  349. SatName$(7)="OSCAR 17 ":   SatName$(8)="OSCAR 18  ": SatName$(9)="OSCAR 19  "
  350. C1(7)=1990:                C1(8)=1990:               C1(9)=1990
  351. C2(7)=22.0781597#:         C2(8)=22.0781597#:        C2(9)=22.0781597#
  352. C3(7)=98.738:              C3(8)=98.738:             C3(9)=98.738
  353. C4(7)=97.9558:             C4(8)=97.9558:            C4(9)=97.9558
  354. C5(7)=.00133:              C5(8)=.00133:             C5(9)=.00133
  355. C6(7)=114.674:             C6(8)=114.674:            C6(9)=114.674
  356. C7(7)=281.82:              C7(8)=281.82:             C7(9)=281.82
  357. C8(7)=14.221152#:          C8(8)=14.221152#:         C8(9)=14.221152#
  358. C9(7)=-.000005#:           C9(8)=.000005:            C9(9)=.000005#
  359. C10(7)=0:                  C10(8)=0:                 C10(9)=0
  360. C11(7)=0:                  C11(8)=0:                 C11(9)=0
  361. C12(7)=0:                  C12(8)=0:                 C12(9)=0
  362. C13(7)=180:                C13(8)=180:               C13(9)=180
  363.  
  364. SatName$(10)="OSCAR 20 "  
  365. C1(10)=1990               
  366. C2(10)=85.20385752#       
  367. C3(10)=99.052            
  368. C4(10)=147.3503           
  369. C5(10)=.0540825            
  370. C6(10)=236.3713           
  371. C7(10)=118.4676           
  372. C8(10)=12.83121017#        
  373. C9(10)=9.599999999999D-07         
  374. C10(10)=610          
  375. C11(10)=0:                
  376. C12(10)=0:                
  377. C13(10)=180:              
  378.  
  379.  
  380. RETURN
  381.  
  382.